package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 调用Person类中所有被注解@AutoRunMethod标注的方法N次
 * 具体次数有竹节参数value决定
 */
public class Test4 {
    public static void main(String[] args) throws Exception {

        Class cls = Class.forName("reflect.Person"); //1.获取Person类

        Constructor c = cls.getConstructor(String.class);//2.创建对象, 调用String参够早的
        Object obj = c.newInstance("张三");//实例化Person对象
        Method[] methods = cls.getDeclaredMethods();//3.获取所有方法
        for(Method method: methods) {//4.遍历所有方法，
            if (method.isAnnotationPresent(AutoRunMethod.class)){//判断方法上是否有@AutoRunMethod注解, 是则调用
                AutoRunMethod arm = method.getAnnotation(AutoRunMethod.class);//获取注解对象
                int value = arm.value(); //获得注解的value属性值
                System.out.println("调用方法:"+method.getName()+"()"+value+"次");//调用方法
                for(int i=0; i<value; i++){//循环value次, 遍历
                    method.invoke(obj);//调用方法
                }
            }else{//没有被标注
                System.out.println(method.getName()+"该方法没有被标记!");
            }
        }
    }
}
